Backdrop

프로그래머스 ▸ 코딩테스트 입문

OX퀴즈
0

문제 설명

덧셈, 뺄셈 수식들이 'X [연산자] Y = Z' 형태로 들어있는 문자열 배열 quiz가 매개변수로 주어집니다. 수식이 옳다면 "O"를 틀리다면 "X"를 순서대로 담은 배열을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 연산 기호와 숫자 사이는 항상 하나의 공백이 존재합니다. 단 음수를 표시하는 마이너스 기호와 숫자 사이에는 공백이 존재하지 않습니다.
  • 1 ≤ quiz의 길이 ≤ 10
  • X, Y, Z는 각각 0부터 9까지 숫자로 이루어진 정수를 의미하며, 각 숫자의 맨 앞에 마이너스 기호가 하나 있을 수 있고 이는 음수를 의미합니다.
  • X, Y, Z는 0을 제외하고는 0으로 시작하지 않습니다.
  • -10,000 ≤ X, Y ≤ 10,000
  • -20,000 ≤ Z ≤ 20,000
  • [연산자]는 + 와 - 중 하나입니다.

입출력 예

quizresult
["3 - 4 = -3", "5 + 6 = 11"]["X", "O"]
["19 - 6 = 13", "5 + 66 = 71", "5 - 15 = 63", "3 - 1 = 2"]["O", "O", "X", "O"]

입출력 예 설명

입출력 예 #1

  • 3 - 4 = -3 은 틀린 수식이므로 "X", 5 + 6 = 11 은 옳은 수식이므로 "O" 입니다. 따라서 ["X", "O"]를 return합니다.

입출력 예 #2

  • 19 - 6 = 13 은 옳은 수식이므로 "O", 5 + 66 = 71 은 옳은 수식이므로 "O", 5 - 15 = 63 은 틀린 수식이므로 "X", 3 - 1 = 2는 옳은 수식이므로 "O" 따라서 ["O", "O", "X", "O"]를 return합니다.

풀이

이론

eval()

eval()은 문자로 표현된 JavaScript 코드를 실행하는 함수예요.

console.log(eval('2 + 2'));
// Expected output: 4
 
console.log(eval(new String('2 + 2')));
// Expected output: 2 + 2
 
console.log(eval('2 + 2') === eval('4'));
// Expected output: true
 
console.log(eval('2 + 2') === eval(new String('2 + 2')));
// Expected output: false

eval을 절대 사용하지 말 것!

eval()은 인자로 받은 문자열을 자바스크립트 코드로 실행하는 함수예요. 악의적인 사용자가 eval()에 악성 코드를 넣어서 실행하면, 악성 코드가 실행되어 보안에 매우 취약해져요.

또한 최신 자바스크립트 엔진에서 여러 최적화를 수행하는데, eval()을 사용하면 이러한 최적화를 수행할 수 없어 성능이 떨어져요.

코드

function solution(quiz) {
  return quiz.map(q => (eval(q.replace('=', '===')) ? 'O' : 'X'));
}